class_name NPC
extends Area2D

# NPC配置
@export var npc_name: String = "村民"
@export var dialogue_data: Array[Dictionary] = []
@export var npc_portrait: Texture2D

# 节点引用
@onready var sprite: Sprite2D = $Sprite2D
@onready var collision: CollisionShape2D = $CollisionShape2D

# 对话系统引用
var player_in_range: bool = false
var dialogue_active: bool = false

func _ready():
	# 连接信号
	body_entered.connect(_on_body_entered)
	body_exited.connect(_on_body_exited)
	
	# 设置碰撞检测
	collision_layer = 0
	collision_mask = 1  # 检测玩家层
	
	# 设置默认对话数据（如果没有配置）
	if dialogue_data.is_empty():
		setup_default_dialogue()

func setup_default_dialogue():
	"""设置默认对话内容"""
	dialogue_data = [
		{
			"speaker": "npc",
			"text": "你好！欢迎来到这里。"
		},
		{
			"speaker": "player",
			"text": "你好，请问这里是什么地方？"
		},
		{
			"speaker": "npc",
			"text": "这里是新手村，你可以在这里学习基本的游戏操作。"
		},
		{
			"speaker": "player",
			"text": "谢谢你的帮助！"
		},
		{
			"speaker": "npc",
			"text": "不客气，祝你游戏愉快！"
		}
	]

func _on_body_entered(body):
	"""玩家进入NPC范围"""
	# 检查是否是玩家（通过组或脚本检测）
	if body.is_in_group("player") or body.has_method("move_and_slide"):
		player_in_range = true
		print("玩家接近NPC: ", npc_name)
		# 立即触发对话
		start_dialogue()

func _on_body_exited(body):
	"""玩家离开NPC范围"""
	# 检查是否是玩家（通过组或脚本检测）
	if body.is_in_group("player") or body.has_method("move_and_slide"):
		player_in_range = false
		print("玩家离开NPC: ", npc_name)
		# 如果对话正在进行，结束对话
		if dialogue_active:
			end_dialogue()

func start_dialogue():
	"""开始对话"""
	if not dialogue_active:
		dialogue_active = true
		DialogueSystem.start_dialogue(dialogue_data, npc_portrait, npc_name)
		DialogueSystem.dialogue_ended.connect(_on_dialogue_ended)

func end_dialogue():
	"""结束对话"""
	if dialogue_active:
		DialogueSystem.end_dialogue()

func _on_dialogue_ended():
	"""对话结束回调"""
	dialogue_active = false
	if DialogueSystem.dialogue_ended.is_connected(_on_dialogue_ended):
		DialogueSystem.dialogue_ended.disconnect(_on_dialogue_ended)
